function varargout = deleteModelFolder(modelName, varargin)
%deleteModelFolder 删除模型文件夹
%   删除模型文件夹。
%
%   语法：
%   deleteModelFolder(ModelName)
%   deleteModelFolder(ModelName, 'ProjectObj', prj)
%
%   输入参数：
%   modelName - 要删除的模型名称
%   varargin - 可选参数
%     'ProjectObj' - Name-Value参数，指定项目对象（默认调用currentProject()）

%   
% 解析输入参数
p = inputParser;
addParameter(p, 'ProjectObj', [], @(x) isempty(x) || isa(x, 'matlab.project.Project'));
parse(p, varargin{:});

if nargin < 1
    % 如果未提供模型名称，则查询模型名称
    modelName = char(inputdlg('Enter model name.', 'Model Name', [1 50]));
end

% 检查模型名称是否有效
if ~isvarname(modelName)
    error([modelName, ' 是无效的模型名称。模型名称必须是有效的 MATLAB 变量名。请参阅 MATLAB 帮助文档了解变量命名规则。']);
end

try
    % 关闭可能仍存在于内存中的模型和数据字典
    bdclose(modelName);
    Simulink.data.dictionary.closeAll(['DD_', modelName, '.sldd'], '-discard');
catch
end

% 获取项目对象（保留用于未来扩展，当前版本暂不使用）
if ~isempty(p.Results.ProjectObj)
    prj = p.Results.ProjectObj;  %#ok<NASGU> % 使用传入的项目对象
else
    prj = currentProject();  %#ok<NASGU> % 否则获取当前项目
end

% 获取模型文件夹
modelDir = ProjectPathManager.getDirPath('model root', modelName);

% 获取模型的构建和代码验证文件夹
codeDirs = {ProjectPathManager.getDirPath('top model code', modelName), ...
            ProjectPathManager.getDirPath('ref model code', modelName), ...
            ProjectPathManager.getDirPath('code coverage', modelName), ...
            ProjectPathManager.getDirPath('code metrics', modelName), ...
            ProjectPathManager.getDirPath('code prover', modelName), ...
            ProjectPathManager.getDirPath('code review', modelName), ...
            ProjectPathManager.getDirPath('code standards', modelName), ...
            ProjectPathManager.getDirPath('bug finder', modelName), ...
            ProjectPathManager.getDirPath('test results', modelName)};

try
    % 从项目中删除文件夹
    if exist(modelDir, 'dir')
        try
            rmdir(modelDir, 's');
        catch
            warning(['无法从项目中删除 ''', modelDir, '''。']);
        end
    end
    for dirIdx = 1:length(codeDirs)
        if exist(codeDirs{dirIdx}, 'dir')
            try
                rmdir(codeDirs{dirIdx}, 's');
            catch
                warning(['无法从项目中删除 ''', codeDirs{dirIdx}, '''。']);
            end
        end
    end
catch
    error(['无法从项目中删除 ''', modelDir, '''。']);
end

result.Message = ['模型文件夹 ', modelDir, ' 已成功删除。'];
if nargout > 0
    varargout{1} = result;
end
disp(result.Message);

end
